import { defineStore } from 'pinia';
let { ipcRenderer } = window.electron;
// 1. 创建store
// 参数1：store的唯一表示
// 参数2：对象，可以提供state actions getters
export const useMainStore = defineStore('main', {
    // 开启数据持久化
    persist: {
        enable: true,
        key: 'main',
        storage: localStorage,//缓存方案 localStorage(长期保留) 或者 sessionStorage(标签不互通关闭就清除)
        paths: ['resPackages', 'frpList'],//需要被缓存state的部分数据 删除这个配置字段默认全部缓存 支持 save.me
        serializer: {
            deserialize: JSON.parse,
            serialize: JSON.stringify,
        },//自定义数据序列化的操作
    },
    state: () => ({
        resPackages: {},//资源包对应列表
        frpList: {
            // 'z1z1z1': {
            //     status: true,
            //     createTime:6566465,
            //     name: '我的世界映射'
            // }
        },//frp对应
    }),
    getters: {
        /**
         * 获取frp列表排序
         * @returns 
         */
        getfrpList() {
            const sortedKeys = Object.keys(this.frpList)
                .sort((a, b) => {
                    const frpA = this.frpList[a];
                    const frpB = this.frpList[b];
                    if (frpA.status && !frpB.status) {
                        return -1;
                    } else if (!frpA.status && frpB.status) {
                        return 1;
                    } else {
                        return frpB.createTime - frpA.createTime;
                    }
                });

            return sortedKeys.reduce((sortedObj, key) => {
                sortedObj[key] = this.frpList[key];
                return sortedObj;
            }, {});
        }
    },
    actions: {
        /**
         * 新建一个frp
         * @param {string} name 
         * @param {string} uuid 
         */
        addFrp(name, uuid) {
            this.frpList[uuid] = {
                status: false,
                createTime: Date.now(),
                name
            };
            return true;
        },
        /**
         * 修改frp状态
         * @param {string} uuid 
         * @param {boolean} status 
         */
        setFrpStatus(uuid, status) {
            if (!this.frpList[uuid]) return false;
            this.frpList[uuid].status = Boolean(status);
            return true;
        },
        /**
         * 更新全部frp状态
         */
        async updateFrpStatus() {
            for (let uuid in this.frpList) {
                this.frpList[uuid].status = await ipcRenderer.invoke('isRunProcess', uuid);
            }
        },
        /**
        * 删除指定frp
        * @param {string} uuid 
        */
        delFrp(uuid) {
            window.api.delFrp(uuid);
            delete this.frpList[uuid];
        }
    },
});






export const useToolStore = defineStore('tool', {
    // 开启数据持久化
    persist: {
        enable: true,
        key: 'tool',
        storage: localStorage,//缓存方案 localStorage(长期保留) 或者 sessionStorage(标签不互通关闭就清除)
        paths: ['collapsed', 'consoleAutoHint'],//需要被缓存state的部分数据 删除这个配置字段默认全部缓存 支持 save.me
        serializer: {
            deserialize: JSON.parse,
            serialize: JSON.stringify,
        },//自定义数据序列化的操作
    },
    state: () => ({
        appv: '1.0.44',//软件版本
        appMark: 5,//软件号（这个判断更新的）
        navigationMenu: [
            {
                title: '主页',
                icon: 'icon-shouye',
                activate: '/home',//激活的路径
                isActivate: false,//是否被激活
                path: '/home/index'//路由地址
            },
            {
                title: '服务器',
                icon: 'icon-computer',
                activate: '/server',//激活的路径
                isActivate: false,//是否被激活
                path: '/server/index'//路由地址
            },
            {
                title: 'Frp',
                icon: 'icon-lianjiezhuangtai',
                activate: '/frp',//激活的路径
                isActivate: false,//是否被激活
                path: '/frp/index'//路由地址
            },
            {
                title: '设置',
                icon: 'icon-shezhi2',
                activate: '/setting',//激活的路径
                isActivate: false,//是否被激活
                path: '/setting/index'//路由地址
            }
        ],
        collapsed: false,//侧边导航是否折叠
        setting: {},//软件设置的数据
        isError: {
            status: false,
            msg: '',
            type: null,
            btn: ['打开文件'],
            callback: [() => { }]
        },//错误原因
        serverTypeOptions: [
            {
                label: "minecraft基岩版（BDS）",
                value: "minecraft-bds"
            },
            {
                label: "minecraft互通服（Skript）",
                value: "minecraft-skript"
            },
            {
                label: '铁锈战争',
                value: 'rw-rts'
            },
            {
                label: "通用控制台",
                value: "console"
            },
            {
                label: "⊛通过选择资源包安装",
                value: "sharePack"
            }
        ],
        codingOptions: [
            { value: 'UTF8' },
            { value: 'UTF-8' },
            { value: 'GBK' },
            { value: 'GB2312' },
            { value: 'GB18030' },
            { value: 'BIG5' },
            { value: 'Big5-HKSCS' },
            { value: 'Shift_JIS' },
            { value: 'KS_C_5601' },
            { value: 'UTF-16' },
            { value: 'ASCII' },
            { value: 'CP932' },
            { value: 'CP936' },
            { value: 'CP949' },
            { value: 'CP950' },
            { value: 'win1251' },
            { value: 'UCS2' },
            { value: 'EUC-JP' },
            { value: 'Binary' },
            { value: 'HEX' },
        ],
        consoleAutoHint: {
            type: {},
            hint: {}
        }//控制台补全提示
    }),
    getters: {

    },
    actions: {
        test() {
            return Promise.resolve('你好帅哥');
        },
        /**
         * 获取设置的数据
         */
        getSetting() {
            let pathStr = './datas/setting.json';
            let setting = window.api.getJson(pathStr);
            if (!setting) {
                if (setting === null) {
                    this.isError.status = true;
                    this.isError.type = 'setting';
                    this.isError.msg = '软件设置配置文件不见了，被你删了？';
                    this.isError.btn = ['新增配置'];
                    this.isError.callback[0] = () => {
                        window.api.initSetting();
                    };
                } else if (setting === false) {
                    this.isError.status = true;
                    this.isError.type = 'setting';
                    this.isError.msg = '软件设置配置文件格式错误！请修正！';
                    this.isError.btn = ['打开文件', '重置配置'];
                    this.isError.callback[0] = () => {
                        window.api.openExternal(pathStr);
                    };
                    this.isError.callback[1] = () => {
                        window.api.initSetting();
                    };
                }

                return;
            }
            //如果是因为配置的错误 （然后配置又修复了）就清楚它
            if (this.isError.status && this.isError.type == 'setting') {
                this.isError = {
                    status: false,
                    msg: '',
                    type: null,
                    btn: ['打开文件'],
                    callback: [() => { }]
                };
            }
            window.api.setOpenRun(setting.powerBoot);//设置开机自启的功能
            this.setting = setting;//设置数据到状态库
        }
    },
});